]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
dbusServices/extensions: Await prefs.fillPreferencesWindow
authorLeleat <atule@pm.me>
Tue, 28 May 2024 11:56:49 +0000 (13:56 +0200)
committerMarge Bot <marge-bot@gnome.org>
Tue, 28 May 2024 18:43:53 +0000 (18:43 +0000)
There are cases where it makes sense to have fillPreferencesWindow be
async, so await it. One such case is when using .ui files from resources
with (GTK) templates. When extension developers load the resource in
`fillPreferencesWindow` and then import the js file that registers the
classes, there will be an error at the moment that there is no UI
provided. Similarly, make getPreferencesWidget async optionally.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3348>

js/dbusServices/extensions/extensionPrefsDialog.js
js/extensions/prefs.js

index 9e3ea57ee59478d9754cebd5e3276df4f68cf4bf..6e6b4c8ceb9f02775cf181f04d09c874f9fcc2e4 100644 (file)
@@ -38,7 +38,7 @@ export const ExtensionPrefsDialog = GObject.registerClass({
         const prefsObj = new prefsModule.default({...metadata, dir, path});
         this._extension.stateObj = prefsObj;
 
-        prefsObj.fillPreferencesWindow(this);
+        await prefsObj.fillPreferencesWindow(this);
 
         if (!this.visible_page)
             throw new Error('Extension did not provide any UI');
index f36b9713832ef10f08331b54a2b842252c82f8d5..76ae3ca62c43937f0845c2a5d97031a050f406b3 100644 (file)
@@ -18,7 +18,7 @@ export class ExtensionPreferences extends ExtensionBase {
      * Get the single widget that implements
      * the extension's preferences.
      *
-     * @returns {Gtk.Widget}
+     * @returns {Gtk.Widget|Promise<Gtk.Widget>}
      */
     getPreferencesWidget() {
         throw new GObject.NotImplementedError();
@@ -31,9 +31,10 @@ export class ExtensionPreferences extends ExtensionBase {
      * returned by getPreferencesWidget().
      *
      * @param {Adw.PreferencesWindow} window - the preferences window
+     * @returns {Promise<void>}
      */
-    fillPreferencesWindow(window) {
-        const widget = this.getPreferencesWidget();
+    async fillPreferencesWindow(window) {
+        const widget = await this.getPreferencesWidget();
         const page = this._wrapWidget(widget);
         window.add(page);
     }